package com.zhx.basis;

import java.util.concurrent.atomic.AtomicInteger;

public class JVM学习 {
    volatile int age=23;
    AtomicInteger atomicInteger=new AtomicInteger(23);
    public void add(){
       atomicInteger.getAndIncrement();
    }
    public static void main(String[] args) {
        JVM学习 app1=new JVM学习();
        //23是期望值,24就是修改后的值,修改为24时需要期望值和内存中的值比较相同才会修改为24.因此返回true
        System.out.println(app1.atomicInteger.compareAndSet(23,24));//true
        //此时内存值已经成24,与期望值比较发现不一样,因此修改失败,返回false
        System.out.println(app1.atomicInteger.compareAndSet(23,24));//false



//        for (int i = 0; i <20 ; i++) {
//            new Thread(()->{
//                for (int j = 0; j <1000 ; j++) {
//                    app1.add();
//                }
//            },"线程"+i).start();
//        }
//
//        while (Thread.activeCount()>2){//main线程和gc线程
//            Thread.yield();//放行,让其他线程先执行
//        }
//        System.out.println(app1.age);
//        System.out.println(app1.atomicInteger);

//        new Thread(()->{
//            System.out.println(Thread.currentThread().getName()+"来了,此时age为:"+app1.age);
//            //线程休眠3秒为了让main线程先运行
//            try { Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}
//            app1.add();
//            System.out.println(Thread.currentThread().getName()+"修改了age为:"+app1.age);
//        },"线程1").start();
//        while(app1.age==23){
//            //如果main线程一直在循环说明,main线程没有得到通知,也就是说没有可见性
//        }
//        System.out.println(Thread.currentThread().getName()+"结束!");
    }

}
